package sessionBeans;

import java.util.Hashtable;
import java.util.List;

import javax.ejb.Stateless;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;

import dto.MateriaPrimaAPedirDTO;

import util.XMLParser;

/**
 * Session Bean implementation class DepachoMateriaPrimaBean
 */
@Stateless
public class DepachoMateriaPrimaBean implements DepachoMateriaPrima {

    /**
     * Default constructor. 
     */
    public DepachoMateriaPrimaBean() {
        // TODO Auto-generated constructor stub
        
    }

        @SuppressWarnings("unchecked")
		@Override
        // agarro el string, lo parseo, le sumo el doble de mat prim, vuelvo a enviarlo por jms
        public void despachar(String listaMateriasPrimas) {
                List<MateriaPrimaAPedirDTO> listMateriaPrimaAPedirVO = (List<MateriaPrimaAPedirDTO>) XMLParser.getInstance().parseObject(listaMateriasPrimas);
                for (MateriaPrimaAPedirDTO materiaPrimaAPedirVO : listMateriaPrimaAPedirVO) {
                        materiaPrimaAPedirVO.setCantidad(materiaPrimaAPedirVO.getCantidad()*2);
                }
                this.enviarMateriasPrimas(XMLParser.getInstance().parsear(listMateriaPrimaAPedirVO));
        }

        public void enviarMateriasPrimas(String strMessage) {
                Hashtable<String,String> props = new Hashtable<String,String>();
        props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        props.put(InitialContext.PROVIDER_URL, "jnp://localhost:1099");
        QueueConnection qCon = null;
        QueueSession qSession = null;
        QueueSender qSender = null;
        try {
                InitialContext ctx = new InitialContext(props);

                // buscar la Connection Factory en JNDI
                QueueConnectionFactory qfactory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");

                // buscar la Cola en JNDI
                Queue queue = (Queue) ctx.lookup("queue/pedidosMateriaPrimaRespuestaQueue");

                // crear la connection y la session a partir de la connection
                qCon = qfactory.createQueueConnection();
                qSession = qCon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

                // crear un producer para enviar mensajes usando la session
                qSender = qSession.createSender(queue);
                
                // crear un mensaje de tipo text y setearle el contenido
                TextMessage message = qSession.createTextMessage();
                message.setText(strMessage);

                // enviar el mensaje
                qSender.send(message);
                
        } catch (Exception e) {
                System.out.println("Error al efectuar envio de pedido de materias primas: " + e);
        } finally {
            cerrarSeguro(qCon, qSession, qSender);
    }
        }
        
        private void cerrarSeguro(QueueConnection conn, QueueSession session,
            QueueSender send) {
    try { send.close(); } catch (Throwable e) {}
    try { conn.stop();} catch (Throwable e) {}
    try { session.close();} catch (Throwable e) {}
}

}